package com.free.utils;

import com.google.zxing.EncodeHintType;
import net.glxn.qrgen.core.image.ImageType;
import net.glxn.qrgen.javase.QRCode;

import java.util.Base64;

/**
 * <p>
 * 功能概述:
 * </p>
 * <p>
 * 功能详述:
 * </p>
 */
public class QrCodeUtils {

    /*========================================================================*
     *                         Public Fields (公共属性)
     *========================================================================*/

    /*========================================================================*
     *                         Private Fields (私有属性)
     *========================================================================*/

    private static final int QR_CODE_SIZE = 260;

    /*========================================================================*
     *                         Construct Methods (构造方法)
     *========================================================================*/

    /*========================================================================*
     *                         Public Methods (公有方法)
     *========================================================================*/

    /**
     * 生成指定内容的二维码
     *
     * @param content
     *
     * @return 二维码图片内容（base64）
     */
    public static String createQrCode(String content)
    {
        // 二维码生成（https://github.com/kenglxn/QRGen）
        byte[] image = QRCode.from(content)
                .withHint(EncodeHintType.MARGIN, 0)
                .withSize(QR_CODE_SIZE, QR_CODE_SIZE)
                .to(ImageType.PNG).stream().toByteArray();
        return Base64.getEncoder().encodeToString(image);
    }

    /**
     * 生成指定内容二维码
     * @param content
     *          url链接
     * @param width
     *           宽
     * @param height
     *           高
     * @return
     */
    public static String createQrCode(String content, int width, int height)
    {
        byte[] image = QRCode .from(content)
                .withHint(EncodeHintType.MARGIN, 0)
                .withSize(width, height)
                .to(ImageType.PNG).stream().toByteArray();
        return Base64.getEncoder().encodeToString(image);
    }

    /*========================================================================*
     *                         Private Methods (私有方法)
     *========================================================================*/

}
